package com.jhgsys.internal.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jhgsys.internal.common.entity.DeptTree;
import com.jhgsys.internal.common.entity.DeptTreeNew;
import com.jhgsys.internal.common.entity.QueryRequest;
import com.jhgsys.internal.system.entity.Dept;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @author MrBird
 */
public interface IDeptService extends IService<Dept> {

    /**
     * 查询所有部门
     *
     * @param dept 部门
     * @return
     * @author chenx
     * @since 2019-07-18
     */
    List<Dept> findDeptForm(Dept dept);

    /**
     * 获取部门树（下拉选使用）
     *
     * @return 部门树集合
     */
    List<DeptTree<Dept>> findDepts();

    /**
     * 获取部门列表（树形列表）
     *
     * @param dept 部门对象（传递查询参数）
     * @return 部门树
     */
    List<DeptTree<Dept>> findDepts(Dept dept);

    List<DeptTreeNew<Dept>> searchDepts(Dept dept);

    Integer findDeptsCount(Dept dept);

    DeptTreeNew<Dept> findDeptsA(Dept dept);

    Object findDeptsB(Dept dept);

    /**
     * 获取部门树（供Excel导出）
     *
     * @param dept    部门对象（传递查询参数）
     * @param request QueryRequest
     * @return List<Dept>
     */
    List<Dept> findDepts(Dept dept, QueryRequest request);

    /**
     * 新增部门
     *
     * @param dept 部门对象
     */
    void createDept(Dept dept);

    /**
     * 修改部门
     *
     * @param dept 部门对象
     */
    void updateDept(Dept dept);

    /**
     * 删除部门
     *
     * @param deptIds 部门 ID集合
     */
    //void deleteDepts(String[] deptIds);


    /**
     * 删除部门（原先的是适用于mysql的物理删除）
     *
     * @param ids 部门 ID集合
     */
    void updateDeptDeletedFlg(String ids, Dept dept);

    /**
     * 根据部门id查询部门工序
     * @author qiny
     * @date 2019-07-23 10:20
     * @param deptId 部门id
     * @return
     */
    //List<DeptProcedure> queryDeptProcedureByDeptId(Integer deptId);


    /**
     * 部门excel导出
     *
     * @param dept
     * @param response
     * @author qiny
     * @date 2019-07-24
     */
    void exportDepts(QueryRequest request,Dept dept, HttpServletResponse response);

    DeptTree<Dept> findDeptEletree(Dept dept);


    IPage<Dept> findDepts(QueryRequest request, Dept dept);

    Dept findDeptByDeptId(String deptId);

    List<Dept> findDeptByDeptIds(List<String> deptIds);
}
